/**
 * @param {number[]} nums
 * @return {number}
 */
 var deleteAndEarn = function(nums) {
    let freq=new Map();
    let max=0;
    nums.forEach( e => {
        max=Math.max(e,max)
        if(freq.has(e)){
            freq.set(e,freq.get(e)+1);
        }
        else{
            freq.set(e,1);
        }
    })
    let dp=new Array(max+1).fill(0);
    let ret=0;
    for(let i=1;i<=max;i++){
        dp[i]+=freq.has(i) ? i*freq.get(i):0;
        if(i>3){
            dp[i]+=Math.max(dp[i-2],dp[i-3]);
        }
        else if(i==3){
            dp[i]+=dp[i-2];
        }
        ret=Math.max(ret,dp[i]);
    }
    return ret;
};

// 执行用时：
// 84 ms
// , 在所有 JavaScript 提交中击败了
// 87.38%
// 的用户
// 内存消耗：
// 40 MB
// , 在所有 JavaScript 提交中击败了
// 33.77%
// 的用户